﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PrototiposHP
{
    public partial class frmGestionTurnos : Form
    {
        private static string estadoTurnoSeleccionado;
        private frmOpcionesTurno formOpcionTurno;
        private frmCobroAtencionMédica formCobroAtencion;
        private int nroFilaSeleccionada;
        private int nroColumnaSeleccionada;


        public frmGestionTurnos()
        {
            InitializeComponent();
            cargarGrilla();
        }

        private void frmGestionTurnos_Load(object sender, EventArgs e)
        {
            txtFechaHoraActual.Text = DateTime.Now.ToString();
        }

        private void cargarGrilla()
        {
            DateTime horaInicio = new DateTime(2014, 01, 01, 08, 00, 00);
            TimeSpan duracionTurno = new TimeSpan(0, 30, 0);
            int index = 0;
            while (true)
            {
                grdAgenda.Rows.Add();
                if (index == 0)
                    grdAgenda.Rows[index].Cells[0].Value = horaInicio.ToShortTimeString();
                else
                {
                    horaInicio = horaInicio + duracionTurno;
                    grdAgenda.Rows[index].Cells[0].Value = horaInicio.ToShortTimeString();
                }
                if (horaInicio.Hour < 17)
                    index++;
                else
                    break;
            }
            int cantFilas = grdAgenda.RowCount;
            grdAgenda.RowsDefaultCellStyle.BackColor = Color.LightGray;  //por defecto todo es No disponible

            for (int i = 0; i < cantFilas; i++) //cargamos las celdas Disponibles y seteamos que la primera columna, la de las horas, no sea editable y tenga otro color
            {
                grdAgenda.Rows[i].Cells[0].Style.BackColor = Color.DimGray; //celdas de hora
                grdAgenda.Rows[i].Cells[0].Style.ForeColor = Color.White;
                grdAgenda.Rows[i].Cells[0].ReadOnly = true;

                grdAgenda.Rows[i].Cells[2].Style.BackColor = Color.White;
                if(i < 10)
                    grdAgenda.Rows[i].Cells[4].Style.BackColor = Color.White;
            }
            grdAgenda.Rows[1].Cells[2].Style.BackColor = Color.Orange;  //turno Asignado
            grdAgenda.Rows[2].Cells[2].Style.BackColor = Color.Orange;
            grdAgenda.Rows[4].Cells[4].Style.BackColor = Color.Orange;
            grdAgenda.Rows[5].Cells[2].Style.BackColor = Color.Chocolate; //turno Asignado con llegada registrada
            grdAgenda.Rows[1].Cells[4].Style.BackColor = Color.LightCoral; //turno Cancelado
            grdAgenda.Rows[7].Cells[4].Style.BackColor = Color.YellowGreen;

            //grdAgenda.Rows[5].Cells[3].Style.BackColor = Color.Red; //Asignado
            //grdAgenda.Rows[11].Cells[4].Style.BackColor = Color.Green; //Disponible
            //grdAgenda.Rows[1].Cells[2].Style.BackColor = Color.Yellow; //Asignado y con llegada registrada
            //grdAgenda.Rows[2].Cells[1].Style.BackColor = Color.LightGray; //No disponible
        }

        private void grdAgenda_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            formOpcionTurno = new frmOpcionesTurno();
            string nombrePaciente = "Bárbara Córdoba";
            nroFilaSeleccionada = e.RowIndex;
            nroColumnaSeleccionada = e.ColumnIndex;


            if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.Orange)
            {
                estadoTurnoSeleccionado = "Asignado";
                formOpcionTurno.setEstadoTurno(estadoTurnoSeleccionado);
                formOpcionTurno.SetFormGestionTurno(this);
                formOpcionTurno.cargarForm();
                formOpcionTurno.Show();
            }
            else if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.Chocolate)
            {
                MessageBox.Show("Turno registrado con llegada a " + nombrePaciente, "Aviso", MessageBoxButtons.OKCancel);
            }
            else if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.White || grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.LightCoral)
            {
                if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.White)
                    estadoTurnoSeleccionado = "Disponible";
                if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.LightCoral)
                    estadoTurnoSeleccionado = "Cancelado";
                DialogResult result = MessageBox.Show("Asignar turno para " + nombrePaciente, "Confirmar", MessageBoxButtons.OKCancel);
                if (result == DialogResult.OK)
                {
                    estadoTurnoSeleccionado = "Asignado";
                    grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Orange;
                }
            }
            else if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.YellowGreen)
            {
                formCobroAtencion = new frmCobroAtencionMédica();
                estadoTurnoSeleccionado = "Atendido";
                formCobroAtencion.setEstadoTurno(estadoTurnoSeleccionado);
                formCobroAtencion.SetFormGestionTurno(this);
                formOpcionTurno.cargarForm();
                formOpcionTurno.Show();
            }
            else if (grdAgenda.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor == Color.LightGray)
            {
                MessageBox.Show("No hay turno para el dia y hora seleccionado para este doctor");
                estadoTurnoSeleccionado = "No disponible";
            }

        }

        public void setResultadoOpcionTurno(string resultado)
        {
            string res = resultado;
            if (res.Equals("Cancelar turno"))
                grdAgenda.Rows[nroFilaSeleccionada].Cells[nroColumnaSeleccionada].Style.BackColor = Color.LightCoral; //Disponible - Cancelado
            else if (res.Equals("Registrar llegada"))
                grdAgenda.Rows[nroFilaSeleccionada].Cells[nroColumnaSeleccionada].Style.BackColor = Color.Chocolate; //Asignado con llegada registrada

        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {

        }

        private void label17_Click(object sender, EventArgs e)
        {

        }
    }
}
